var Config = {
  /** 微信小程序：1，QQ小程序：0 */
  /* 客户端种类 */ client: 1, 
  /* 小程序版本 */ v: '0.1.4',
  /* 基础库版本 */ version: '2.4.0',
  /* 服务器地址 */ host: "https://xd435.xyz/practice/index.php/Api",
  /* 控制台输出请求 */ _consoleRequest: true,
  /* 控制台输出返回 */ _consoleResult: true,
};

var appData = {
  refresh: false,   // 携参跳回页面
  refreshTab: null, // 携参跳回参数
  user: {}
};

function nav(url) { wx.navigateTo({  url: url }) }

function update() {
  if (wx.canIUse('getUpdateManager')) {
    var update = wx.getUpdateManager(), that = this;
    update.onCheckForUpdate(function (res) {
      if (res.hasUpdate) {
        update.onUpdateReady(function () {
          modal('更新提示', '即将使用小程序的新版本').then(res => {
            update.applyUpdate();
          })
        })
        update.onUpdateFailed(function () {
          modal('新版本下载失败',
            '发现新版本小程序，请您在“最近使用”下拉栏中删除当前小程序，重新搜索以使用新版本。'
          ).then(res => {
            wx.navigateBack({ delta: 9 });
          })
        })
      }
    })
  };
}
/** 封装post网络请求
 * @param {string}  method  目标方法
 * @param {obj}     data    携带参数
 * @param {func}    cb      回调函数
 * @param {string}  laoding 加载弹窗
 */
function post(method, data, cb, loading) {
  if (loading) wx.showLoading({ title: loading });
  data = data || {}, 
  data.method = method;
  wx.request({
    url: wx.Config.host,
    data: data,
    method: 'POST',
    header: { 'content-type': 'application/json' },
    success: res => {
      if (loading) wx.hideLoading();
      if (wx.Config._consoleRequest) {
        console.group(method + ':', data);
        if (wx.Config._consoleResult) console.log(res.data)
        console.groupEnd();
      }
      if (cb) return cb(res.data);
    },
    fail() {
      toast('网络连接失败，请检查网络配置或账户安全。')
    }
  })
}
/** 封装云函数请求
 * @param {string}  url   目标函数
 * @param {obj}     data  携带参数
 * @param {func}    cb    回调函数
 * @param {string}  log   是否弹出加载
 */
function call(url, data, cb, loading) {
  if (loading) wx.showLoading({ title: loading });
  data = data || {};
  wx.cloud.callFunction({
    name: url,
    data: data,
    success: res => {
      if (loading) wx.hideLoading();
      res.url = url;  // 方便调试。
      if (wx.Config._consoleRequest) {
        console.group(url + ':', data);
        if (wx.Config._consoleResult) console.log(res.result)
        console.groupEnd();
      }
      if (cb) return cb(res);
    },
    fail(res) {
      toast('云函数调用失败，请稍候再试。');
      console.warn(res)
    }
  })
}
/** 封装模态提示
 * @param {str} title   标题，默认为提示
 * @param {str} content 内容
 * @param {str} l     取消文本，默认为取消
 * @param {str} r     确认文本，默认为好的
 * @param {str} cb0   取消回调
 * @param {str} cb1   确认回调
 */
var modalText = [
  { title: '提示', cancel: '取消', confirm: '好的' },
  { title: 'Tip', cancel: 'Cancel', confirm: 'OK' },
]
function modal(title, content, l, r, l_clr, r_clr, cb0, cb1) {
  wx.showModal({
    
    title: title || modalText[wx.lang].title,
    content: content,
    showCancel: l == null ? false : true,
    cancelText: l == 0 || l == null ? modalText[wx.lang].cancel : l,
    confirmText: r || modalText[wx.lang].confirm,
    cancelColor: l_clr || '',
    confirmColor: r_clr || '',
    success: res => {
      if (res.confirm && cb0) return cb0(res);
      else if (cb1) return cb1(res);
    }
  })
}
/** 封装 toast 提示
 * @param {str}  content 提示文本 
 * @param {str}  icon    提示图标，默认无
 * @param {bool} mask    是否有 mask
 * @param {str}  duration 时长
 */
function toast(content, icon, mask, cb, duration) {
  icon = icon ? 'success' : 'none';
  wx.showToast({
    title: content,
    icon: icon,
    image: '',
    duration: duration || 2000,
    mask: mask == 1 ? false : true,
    success: res => { 
      if (cb) setTimeout(() => {
        return cb(res)
      }, duration || 2000 )
    },
  })
}
/**
 * 定义全局的转发函数
 * 希望用户通过分享窗口进入小程序时能先通过预加载页面获取登录信息等
 */
function onShareAppMessage (){
  return {
    path: '/pages/home/preload/preload',
  }
}

function initial() {
  update();
  Config.client = typeof (qq) == "object" ? 0 : 1;
  wx.Config = Config,
    wx.post = post,
    wx.call = call,
    wx.modal = modal,
    wx.toast = toast,
    wx.nav = nav;
    wx.appData = appData;
    wx.onShareAppMessage = onShareAppMessage;
  // if (!wx.cloud) modal('请升级微信', '最低基础库版本：' + Config.version)
  // else wx.cloud.init({ 
  //   traceUser: true,
  //   env: 'pm-cloud'
  // })
  require('util.js').encapsulate();   
}

module.exports = {
  initial: initial
}
